package com.qq.API_日期与时间.JDK8;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.MonthDay;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;


//LocalDateTime综合了LocalDate和LocalTime里面的方法，所以下面只用LocalDate和LocalTime来举例
//这些方法返回的是一个[新的实例引用]，因为LocalDateTime，LocalDate和LocalTime都是[不可变类型]。

//操作时间的方法：
//LocalDate方法：
//plusDays,plusWeeks,plusMonths,plusYears   		 向当前LocalDate对象添加几天，几周，几个月，几年,并返回新的LocalDate对象
//minusDays,minusWeeks,minusMonths,minusYears		 从当前LocalDate对象减去几天，几周，几个月，几年,并返回新的LocalDate对象
//withDayOfMonth,withDayOfYear,withMonth,withYear	 将月份天数，年份天数，月份，年份修改为指定的值，并返回新的LocalDate对象
//equals,isBefore,isAfter									 比较两个LocalDate
//format(DateTimeFormatter d)						 传格式化器来格式化日期对象
//parse(CharSequence text,DateTimeFormatter d)		 传来解析器和字符串来解析文本，并返回对应日期对象

//localTime方法：
//plusHours,plusMinutes,plusSeconds,plusNanos   	 向当前LocalTime对象添加几小时，几分钟，几秒，几纳秒,并返回新的LocalTime对象
//minusHours,minusMinutes,minusSeconds,minusNanos	 从当前LocalTime对象减去几小时，几分钟，几秒，几纳秒,并返回新的LocalTime对象
//withHour,withMinute,withSecond,withNano 	 		 将小时，分钟，秒，纳秒修改为指定的值，并返回新的LocalTime对象
//equals,isBefore,isAfter									 比较两个LocalDate
//format(DateTimeFormatter d)						传格式化器来格式化时间对象
//parse(CharSequence text,DateTimeFormatter d)		调用解析器和字符串来解析文本，并返回对应时间对象
public class API_UpdateTime {
    public static void main(String[] args) {
    	
    	//1.增加，减少，指定 时间和日期
        LocalTime nowTime = LocalTime.now();
        System.out.println(nowTime);//当前时间
        LocalTime nowTime1 = nowTime.minusHours(1);
        System.out.println(nowTime1);//一小时前
        System.out.println(nowTime.minusSeconds(1));//一秒前
        System.out.println(nowTime.minusNanos(1));//一纳秒前
        System.out.println(nowTime.withMinute(59));//将分指定为59
        
        System.out.println("----------------");
        
        LocalDate nowDate = LocalDate.now();
        System.out.println(nowDate);//当前日期
        
        LocalDate nowDate1 = nowDate.plusDays(1);
        System.out.println(nowDate1);//一天后
        System.out.println(nowDate.plusYears(1));//一年后
        //将月指定为2月，天最多指定为28（2月只有28天，无法指定非法的日期和时间，Calendar可以）
        System.out.println(nowDate.withMonth(2).withDayOfMonth(28));
        
        System.out.println("------------------");
        
        // 不可变对象，每次修改产生新对象！原来的对象不变！
        System.out.println(nowTime);
        System.out.println(nowDate);

        System.out.println("---------------");
        
        LocalDate startDate = LocalDate.of(2018, 9, 5);//不用输0
        LocalDate endDate = LocalDate.of(2022, 11, 22);
        LocalDate nowDate2 = LocalDate.now();
        
        System.out.println(nowDate2 + "是否在" + endDate + "之前？ " + startDate+ "之后？ "+ (nowDate2.isBefore(endDate) && nowDate2.isAfter(startDate)));
       
        System.out.println("---------------------------");
        // 判断今天是否是你的生日
        LocalDate birDate = LocalDate.of(2000,11,22);
        LocalDate nowDate3 = LocalDate.now();
        
        //判断生日只需要比较月和日
        MonthDay birMd = MonthDay.of(birDate.getMonthValue(), birDate.getDayOfMonth());
        MonthDay nowMd = MonthDay.from(nowDate1);
        //日期时间对象都重写了equals方法，变为比较日期时间
        System.out.println("今天是你的生日吗？ " + birMd.equals(nowMd));//今天是你的生日吗？ false
    }
}
